package jmine.tec.rpc.server.representation.representers.reflection;

import java.beans.PropertyDescriptor;

import jmine.tec.rpc.server.representation.RepresentationContext;

/**
 * Representador de propriedades
 * 
 * @author lundberg
 * @param <R> tipo de representação
 * @param <E> tipo de entidade representada
 */
public interface PropertyRepresenter<R, E> {

    /**
     * Verifica se este representador é aplicável às propriedades
     * 
     * @param representationProperty representationProperty
     * @return boolean
     */
    boolean isApplicableTo(PropertyDescriptor representationProperty);

    /**
     * Representa uma propriedade, copiando e convertendo um valor encontrado no objeto para a propriedade
     * 
     * @param context context
     * @param representation representation
     * @param representationProperty representationProperty
     * @param object object
     * @throws Exception Exception
     */
    void representProperty(RepresentationContext context, R representation, PropertyDescriptor representationProperty, E object)
            throws Exception;
}
